Most non-trivial computing environments include some form of physical memory management. Memory management refers generally to the act of managing the memory available in the computer system. More specifically, memory management typically involves providing routines for allocating portions of the available memory to programs at their request. Memory management also involves providing ways of deallocating, also called “freeing”, the memory at the request of a program and thereby returning it to the computer system for reuse.
In most non-trivial computing environments, memory management functions are handled by the operating system. Typically, an application program makes a request to the operating system to allocate memory to the application program. When the application program no longer needs the allocated memory, the application program then calls the operating system with an instruction to free the previously allocated memory region.
While memory management functions are typically provided by the operating system in non-trivial computing environments, memory management functionality is typically unavailable in computing environments having limited processing capability or where an operating system is not available. For instance, an embedded computing system having limited computing capabilities would typically not offer memory management functions. Similarly, a pre-boot computing environment, such as a basic input output system (“BIOS”), that performs its functions prior to the execution of an operating system would also not offer memory management functions to routines executing within the BIOS environment.
One reason that memory management functions are not made available in limited capability computing environments and in pre-boot computing environments is that these environments typically have limited system resources available. For instance, these environments typically have small amounts of available memory. Previous routines for providing memory management functions require large amounts of memory and are therefore not well suited for execution in these environments. Moreover, many previous routines for providing memory management functions perform significant processing within the memory allocation routines. This can create a significant performance penalty for applications that perform many memory allocations in a limited capability computing environment.
It is with respect to these considerations and others that the present invention has been made.